﻿//using System;
//using System.Collections.Generic;
//using System.Text;
//using DCRF.Common.Core;
//using DCRF.Common.Primitive;
//using DCRF.Common.Helper;
//using System.Reflection;
//using DCRF.Common.DBC;
//using DCRF.Common.Interface;
//using System.Windows.Forms;
//using DBML.Interface;
//using DBML.Provider;
//using System.Collections;
//using DBML.Interface.Criteria;
//using DBML.Common;
//using DBML.Common.Dynamic;
//using DBML.Common.Concrete;
//using DBML.Interface.Provider;
//using DCRF.Common.Support;

//namespace DCRF.BaseComponents
//{
//    public class Entity: BlockBase
//    {
//        public override BlockInfo BlockInfo
//        {
//            get
//            {
//                BlockInfo result = new BlockInfo();

//                result.BlockID = new CID("Entity", new BlockVersion(0, 1, 0, 0));
//                result.FriendlyName = "Entity";


//                return result;
//            }
//        }

//        private IProvider provider = null;
//        public override void InitProperties()
//        {
//            Properties.Add("ProviderType", typeof(int));
//            Properties.Add("EntityName", typeof(string));
//            Properties.Add("ProviderFile", typeof(string));
//        }

//        private void init()
//        {
//            if (provider == null)
//            {
//                DBML.DBCore.file = Properties["ProviderFile"].ToString();
//                DBML.DBCore.initializeProvider((DBML.ProviderType)Properties["ProviderType"]);

//                provider = DBML.DBCore.getInstance();
//            }
//        }

//        [BlockService]
//        public SimpleTable ExtractSchema()
//        {
//            init();

//            SimpleTable result = new SimpleTable();

//            DBField[] fields = provider.Columns(this.Properties["EntityName"].ToString());
//            List<object> defValues = new List<object>();

//            foreach (DBField field in fields)
//            {
//                Type type = typeof(string);
//                object defVal = "";

//                switch ( field.dataType )
//                {
//                    case enumDataType.Bool: type = typeof(bool); defVal = true;  break;
//                    case enumDataType.Byte: type = typeof(byte); defVal = 0; break;
//                    case enumDataType.DateTime: type = typeof(DateTime); defVal = DateTime.MinValue; break;
//                    case enumDataType.Decimal: type = typeof(decimal); defVal = (decimal)0; break;
//                    case enumDataType.Double: type = typeof(double); defVal = 0.0d; break;
//                    case enumDataType.Float: type = typeof(float); defVal = 0.0f; break;
//                    case enumDataType.Short: type = typeof(short); defVal = (short)0; break;
//                    case enumDataType.Long: type = typeof(long); defVal = (long)0; break;
//                    case enumDataType.Number: type = typeof(int); defVal = 0; break;
//                    case enumDataType.Unknown: type = typeof(object); defVal = null; break;
//                }

//                result.AddKeys(field.name, type);
//                defValues.Add(defVal);
//            }

//            result.AddRow(defValues.ToArray());

//            return result;
//        }

//        [BlockService]
//        public IDataRow CreateRow()
//        {
//            init();

//            IDataRow row = DynamicManager.GetInstance().NewTableRow(Properties["EntityName"].ToString());

//            return row;
//        }


//        [BlockService]
//        public long SaveRow(IDataRow row)
//        {
//            init();

//            (row as DynamicRow).SaveData();

//            return (long)row.GetFieldValue("PK_ID");
//        }

//        [BlockService]
//        public IRowCollection ReadRows(SelectCriteria criteria)
//        {
//            init();

//            return DynamicManager.GetInstance().SearchRows(this["EntityName"].ToString(), criteria);
//        }
                
//        [BlockService]
//        public IRowCollection ReadRows(string criteria)
//        {
//            init();


//            return DynamicManager.GetInstance().SearchRows(this["EntityName"].ToString(), criteria);
//        }    

//        [BlockService]
//        public void DeleteRow(long id)
//        {
//            init();

//            FieldCollection pk = new FieldCollection();
//            pk["PK_ID"] = id;

//            DynamicManager.GetInstance().DeleteRow(this["EntityName"].ToString(), pk);
//        }
//    }
//}
